#Requires AutoHotkey v2.0

; ** FileTool 简单文件池  v1.01_bate
; 其实就是两个Map,一个存放文件路径，一个存放优先级

class FilePool {

    __New() {
        this.pathMap := Map()      ; => 文件路径
        this.priorityMap := Map()  ; => 优先级
        this.priorityAcc := 0      ; => 优先级累加器
    }

    ; 插入或更新; 添加成功，返回true, 否则返回false
    Add(path, priority := this.priorityAcc) {
        
        ; 累加器自增
        this.priorityAcc++

        ; 文件路径唯一不可重复
        if(this.pathMap.Has(path)){
            return false
        }
        
        ; 文件优先级唯一不可重复
        if(this.priorityMap.Has(priority)){
            return false
        }

        ; 插入
        this.priorityMap.Set(priority, true)
        this.pathMap.Set(path, this.priorityMap[priority])
        
        return true
    }

    ; 按优先级升序输出（返回一个数组，元素是 {path, priority}）
    GetSorted() {

        ; 临时数组
        filePoolArray := []
        
        ; 提取数据
        for path, priority in this.pathMap{
            fileTemp := Object()
            fileTemp.path := path
            fileTemp.priority := priority
            filePoolArray.Push(fileTemp)
        }
        
        i := 1
    
        while(i < filePoolArray.Length){

            j := i + 1

            while(j <= filePoolArray.Length){
                if(filePoolArray[i].priority > filePoolArray[j].priority){
                    temp := filePoolArray[i]
                    filePoolArray[i] := filePoolArray[j]
                    filePoolArray[j] := temp
                }
                j++
            }
    
            i++
        }

        return filePoolArray
    }
}
